package org.example.microservice.common.utils;

import java.math.BigDecimal;

public class ExcelUtil {

    /**
     * 把excel列的英文名称转为索引（索引值从1开始）；例如：第AB列的列数为28
     *
     * @param columnName 列的英文名称
     * @return 列的索引（索引值从1开始）
     */
    public static int getExcelColumnIndex(String columnName) {
        if (!columnName.matches("^[A-Za-z]+$")) {
            throw new RuntimeException("excel列的英文名称错误：名称只能为英文字母");
        }
        int columnIndex = 0;
        char[] array = columnName.toUpperCase().toCharArray();
        for (int i = 0; i < array.length; i++) {
            columnIndex += (array[i] - 'A' + 1) * BigDecimal.valueOf(26).pow(array.length - i - 1).intValue();
        }
        return columnIndex;
    }

    /**
     * 把excel列的索引（索引值从1开始）转为英文名；例如：第28列对于的列名为AB
     *
     * @param columnIndex 列的索引（索引值从1开始）
     * @return 列的英文名
     */
    public static String getExcelColumnName(int columnIndex) {
        if (columnIndex < 1) {
            throw new RuntimeException("excel列的索引值错误：索引值不得小于1");
        }
        String columnName = "";
        while (true) {
            if (columnIndex == 0) {
                break;
            }
            columnName = (char) ('A' + columnIndex % 26 - 1) + columnName;
            columnIndex = columnIndex / 26;
        }
        return columnName;
    }
}
